/*     */ package com.zimbra.cs.html;
/*     */ 
/*     */ import java.io.IOException;
/*     */ import java.io.Writer;
/*     */ import java.util.HashSet;
/*     */ import java.util.Set;
/*     */ import java.util.Stack;
/*     */ import org.xml.sax.Attributes;
/*     */ import org.xml.sax.SAXException;
/*     */ import org.xml.sax.helpers.DefaultHandler;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class XHtmlDocumentHandler
/*     */   extends DefaultHandler
/*     */ {
/*  45 */   private static Set<String> removeTags = new HashSet();
/*     */   
/*  47 */   private static Set<String> removeAttributes = new HashSet();
/*     */   private Writer out;
/*     */   
/*  50 */   static { removeTags.add("applet");
/*  51 */     removeTags.add("frame");
/*  52 */     removeTags.add("frameset");
/*  53 */     removeTags.add("iframe");
/*  54 */     removeTags.add("object");
/*  55 */     removeTags.add("script");
/*  56 */     removeTags.add("style");
/*  57 */     removeTags.add("animate");
/*  58 */     removeTags.add("foreignobject");
/*  59 */     removeTags.add("embed");
/*  60 */     removeTags.add("use");
/*     */     
/*  62 */     removeAttributes.add("onclick");
/*  63 */     removeAttributes.add("ondblclick");
/*  64 */     removeAttributes.add("onmousedown");
/*  65 */     removeAttributes.add("onmouseup");
/*  66 */     removeAttributes.add("onmouseover");
/*  67 */     removeAttributes.add("onmousemove");
/*  68 */     removeAttributes.add("onmouseout");
/*  69 */     removeAttributes.add("onkeypress");
/*  70 */     removeAttributes.add("onkeydown");
/*  71 */     removeAttributes.add("onkeyup");
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*  86 */   private Stack<String> removedElements = new Stack();
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*  91 */   private StringBuffer textBuffer = new StringBuffer();
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   public XHtmlDocumentHandler(Writer out)
/*     */   {
/*  98 */     this.out = out;
/*     */   }
/*     */   
/*     */   public void characters(char[] buf, int start, int len)
/*     */     throws SAXException
/*     */   {
/* 104 */     if (!this.removedElements.isEmpty())
/*     */     {
/* 106 */       return;
/*     */     }
/* 108 */     this.textBuffer.append(new String(buf, start, len));
/*     */   }
/*     */   
/*     */   public void processingInstruction(String target, String data) throws SAXException
/*     */   {
/*     */     try
/*     */     {
/* 115 */       this.out.append("<?").append(target).append(" ").append(data).append("?>");
/*     */     } catch (IOException e) {
/* 117 */       throw new SAXException(e);
/*     */     }
/*     */   }
/*     */   
/*     */   public void startDocument() throws SAXException
/*     */   {
/*     */     try {
/* 124 */       this.out.write("<?xml version='1.0' encoding='UTF-8'?>\n");
/*     */     } catch (IOException e) {
/* 126 */       throw new SAXException(e);
/*     */     }
/*     */   }
/*     */   
/*     */   public void endDocument() throws SAXException
/*     */   {
/*     */     try {
/* 133 */       this.out.flush();
/*     */     } catch (IOException e) {
/* 135 */       throw new SAXException(e);
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   public void startElement(String namespaceURI, String sName, String qName, Attributes attrs)
/*     */     throws SAXException
/*     */   {
/* 145 */     String eName = "".equals(sName) ? qName : sName;
/*     */     
/*     */ 
/* 148 */     if (removeTags.contains(eName.toLowerCase())) {
/* 149 */       this.removedElements.push(eName.toLowerCase());
/* 150 */       return;
/*     */     }
/*     */     try
/*     */     {
/* 154 */       if (this.textBuffer.length() > 0)
/*     */       {
/* 156 */         this.out.append(this.textBuffer);
/* 157 */         this.textBuffer = new StringBuffer();
/*     */       }
/* 159 */       this.out.append("<");
/* 160 */       this.out.append(eName);
/* 161 */       if (attrs != null)
/* 162 */         for (int i = 0; i < attrs.getLength(); i++) {
/* 163 */           String aName = "".equals(attrs.getLocalName(i)) ? attrs.getQName(i) : attrs.getLocalName(i);
/* 164 */           if (!removeAttributes.contains(aName.toLowerCase()))
/*     */           {
/*     */ 
/*     */ 
/* 168 */             this.out.append(" ");
/* 169 */             this.out.append(aName + "=\"" + attrs.getValue(i) + "\"");
/*     */           }
/*     */         }
/* 172 */       this.out.append(">");
/*     */     }
/*     */     catch (IOException e) {
/* 175 */       throw new SAXException(e);
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */   public void endElement(String namespaceURI, String sName, String qName)
/*     */     throws SAXException
/*     */   {
/* 184 */     String eName = "".equals(sName) ? qName : sName;
/*     */     
/* 186 */     if ((!this.removedElements.isEmpty()) && (((String)this.removedElements.peek()).equals(eName.toLowerCase())))
/*     */     {
/* 188 */       this.removedElements.pop();
/* 189 */       return;
/*     */     }
/*     */     
/*     */     try
/*     */     {
/* 194 */       if (this.textBuffer.length() > 0)
/*     */       {
/* 196 */         this.out.append(this.textBuffer);
/* 197 */         this.textBuffer = new StringBuffer();
/*     */       }
/* 199 */       this.out.append("</").append(eName).append(">");
/*     */     } catch (IOException e) {
/* 201 */       throw new SAXException(e);
/*     */     }
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/html/XHtmlDocumentHandler.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */